﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Common;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace projetoFinal
{
    public class operaUsuario
    {
        public static usuario validaLogin(string login, string senha)
        {
            usuario user = null;
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append("SELECT codUsuario, nome FROM usuario WHERE ");
            strSQL.AppendFormat(" login = {0} ", "'" + login + "'");
            strSQL.AppendFormat(" AND senha = {0} ", "'" + senha + "'");
            strSQL.AppendFormat(" AND status = {0} ", (int)status.ativo);

            using (IDataReader dr = DAOHelper.executeQuery(strSQL.ToString()))
            {
                if (dr.Read())
                {
                    //Pega o código do usuário
                    user = operaUsuario.buscar(Int64.Parse(dr["codUsuario"].ToString()));
                }
            }

            return user;
        }
        public static List<usuario> listar(string field, string value, int crit)
        {
            List<usuario> listUsuario = new List<usuario>();
            string strSQL = string.Empty;

            if (field.Equals(""))
            {
                strSQL = " SELECT * FROM usuario";
            }
            else
            {
                strSQL = DAOHelper.sqlQueryBuilder("usuario", field, value, crit);
            }

            using (IDataReader dr = DAOHelper.executeQuery(strSQL))
            {
                while (dr.Read())
                {
                    nivelAcesso objNivelAcesso = operaNivelAcesso.buscar(Int64.Parse(dr["codNivelAcesso"].ToString()));
                    seguradora objSeguradora = null;
                    prestadorServico objPrestadora = null;
                    if (dr["codCadastro"] != DBNull.Value)
                    {
                        objSeguradora = operaSeguradora.buscar(Int64.Parse(dr["codCadastro"].ToString()));
                        if (objSeguradora == null)
                        {
                            objPrestadora = operaPrestadorServico.buscar(Int64.Parse(dr["codCadastro"].ToString()));
                        }
                    }
                    usuario objUsuario = new usuario(Int64.Parse(dr["codUsuario"].ToString()), dr["nome"].ToString(), dr["login"].ToString(), dr["senha"].ToString(), objNivelAcesso, objSeguradora, objPrestadora, dr["email"].ToString(), dr["funcao"].ToString(), (status)Int16.Parse(dr["status"].ToString()));
                    listUsuario.Add(objUsuario);
                }
            }
            return listUsuario;
        }
        public static int apagar(Int64 codUsuario)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" DELETE FROM usuario ");
            strSQL.Append(" WHERE ");
            strSQL.Append(" codUsuario = ");
            strSQL.AppendFormat("{0}; ", codUsuario);
            return DAOHelper.executeDML(strSQL.ToString());
        }
        public static usuario buscar(Int64 codUsuario)
        {
            usuario objUsuario;
            List<usuario> listaUsuario = listar(" codUsuario ", codUsuario.ToString(), 1);
            if (listaUsuario.Count == 1)
            {
                objUsuario = listaUsuario[0];
            }
            else
            {
                objUsuario = null;
            }
            return objUsuario;
        }
        public static int editar(usuario objUsuario)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" UPDATE usuario ");
            strSQL.Append(" SET ");
            strSQL.AppendFormat("   nome = {0} ", "'" + objUsuario.Nome + "'");
            strSQL.AppendFormat(" , login = {0} ", "'" + objUsuario.Login + "'");
            if (objUsuario.Senha != string.Empty)
            {
                strSQL.AppendFormat(" , senha = {0} ", "'" + objUsuario.Senha + "'");
            }
            strSQL.AppendFormat(" , codNivelAcesso = {0} ", objUsuario.NivelAcesso.CodNivelAcesso);
            if (objUsuario.Seguradora != null)
            {
                strSQL.AppendFormat(" , codCadastro = {0} ", objUsuario.Seguradora.CodCadastro);
            }
            else if (objUsuario.Prestador != null)
            {
                strSQL.AppendFormat(" , codCadastro = {0} ", objUsuario.Prestador.CodCadastro);
            }
            else
            {
                strSQL.Append(" , codCadastro = NULL ");
            }
            strSQL.AppendFormat(" , email = {0} ", "'" + objUsuario.Email + "'");
            strSQL.AppendFormat(" , funcao = {0} ", "'" + objUsuario.Funcao + "'");
            strSQL.AppendFormat(" , status = {0} ", (Int32)objUsuario.Status);
            strSQL.Append(" WHERE ");
            strSQL.AppendFormat(" codUsuario = {0}; ", objUsuario.CodUsuario);
            return DAOHelper.executeDML(strSQL.ToString());
        }
        public static int incluir(usuario objUsuario)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" INSERT INTO ");
            strSQL.Append(" usuario ");
            strSQL.Append(" ( ");
            strSQL.Append("     nome, login, senha, codNivelAcesso, codCadastro, email, funcao, status ");
            strSQL.Append(" ) ");
            strSQL.Append(" VALUES ");
            strSQL.Append(" ( ");
            strSQL.AppendFormat(" {0} ", "'" + objUsuario.Nome + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objUsuario.Login + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objUsuario.Senha + "'");
            strSQL.AppendFormat(" , {0} ", objUsuario.NivelAcesso.CodNivelAcesso);
            if (objUsuario.Seguradora != null)
            {
                strSQL.AppendFormat(" , {0} ", objUsuario.Seguradora.CodCadastro);
            }
            else if (objUsuario.Prestador != null)
            {
                strSQL.AppendFormat(" , {0} ", objUsuario.Prestador.CodCadastro);
            }
            else
            {
                strSQL.Append(" , NULL ");
            }
            strSQL.AppendFormat(" , {0} ", "'" + objUsuario.Email + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objUsuario.Funcao + "'");
            strSQL.AppendFormat(" , {0} ", (Int32)objUsuario.Status);
            strSQL.Append("  ); ");
            return DAOHelper.executeDML(strSQL.ToString());
        }
    }
}